1 // FileSystemInfoTest.cs - NUnit Test Cases for System.IO.FileSystemInfo class
3 // Ville Palo (vi64pa@koti.soon.fi)
9 using System.Globalization;
11 using System.Runtime.Serialization;
12 using System.Runtime.Serialization.Formatters.Binary;
13 using System.Threading;
15 using NUnit.Framework;
17 namespace MonoTests.System.IO
20 public class FileSystemInfoTest
22 CultureInfo old_culture;
23 string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
24 static readonly char DSC = Path.DirectorySeparatorChar;
29 if (Directory.Exists (TempFolder))
30 Directory.Delete (TempFolder, true);
31 Directory.CreateDirectory (TempFolder);
32 old_culture = Thread.CurrentThread.CurrentCulture;
33 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US", false);
37 public void TearDown()
39 if (Directory.Exists (TempFolder))
40 Directory.Delete (TempFolder, true);
41 Thread.CurrentThread.CurrentCulture = old_culture;
46 return Path.DirectorySeparatorChar == '\\';
52 return Path.DirectorySeparatorChar == '/';
58 return Path.DirectorySeparatorChar == ':';
62 private void DeleteFile (string path)
64 if (File.Exists (path))
68 private void DeleteDir (string path)
70 if (Directory.Exists (path))
71 Directory.Delete (path, true);
75 [Category("TargetJvmNotSupported")] // CreationTime not supported for TARGET_JVM
76 public void CreationTimeFile ()
79 Assert.Ignore ("Unix doesn't support CreationTimes");
81 string path = TempFolder + DSC + "FSIT.CreationTime.Test";
85 File.Create (path).Close ();
86 FileSystemInfo info = new FileInfo (path);
87 info.CreationTime = new DateTime (1999, 12, 31, 11, 59, 59);
89 DateTime time = info.CreationTime;
90 Assert.AreEqual (1999, time.Year, "#A1");
91 Assert.AreEqual (12, time.Month, "#A2");
92 Assert.AreEqual (31, time.Day, "#A3");
93 Assert.AreEqual (11, time.Hour, "#A4");
94 Assert.AreEqual (59, time.Minute, "#A5");
95 Assert.AreEqual (59, time.Second, "#A6");
97 time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
98 Assert.AreEqual (1999, time.Year, "#B1");
99 Assert.AreEqual (12, time.Month, "#B2");
100 Assert.AreEqual (31, time.Day, "#B3");
101 Assert.AreEqual (11, time.Hour, "#B4");
102 Assert.AreEqual (59, time.Minute, "#B5");
103 Assert.AreEqual (59, time.Second, "#B6");
105 info.CreationTimeUtc = new DateTime (1999, 12, 31, 11, 59, 59);
107 time = TimeZone.CurrentTimeZone.ToUniversalTime (info.CreationTime);
108 Assert.AreEqual (1999, time.Year, "#C1");
109 Assert.AreEqual (12, time.Month, "#C2");
110 Assert.AreEqual (31, time.Day, "#C3");
111 Assert.AreEqual (11, time.Hour, "#C4");
112 Assert.AreEqual (59, time.Minute, "#C5");
113 Assert.AreEqual (59, time.Second, "#C6");
115 time = info.CreationTimeUtc;
116 Assert.AreEqual (1999, time.Year, "#D1");
117 Assert.AreEqual (12, time.Month, "#D2");
118 Assert.AreEqual (31, time.Day, "#D3");
119 Assert.AreEqual (11, time.Hour, "#D4");
120 Assert.AreEqual (59, time.Minute, "#D5");
121 Assert.AreEqual (59, time.Second, "#D6");
128 [Category("TargetJvmNotSupported")] // CreationTime not supported for TARGET_JVM
129 public void CreationTimeDirectory ()
132 Assert.Ignore ("Unix doesn't support CreationTimes");
134 string path = TempFolder + DSC + "FSIT.CreationTimeDirectory.Test";
138 FileSystemInfo info = Directory.CreateDirectory (path);
139 info.CreationTime = new DateTime (1999, 12, 31, 11, 59, 59);
140 DateTime time = info.CreationTime;
142 Assert.AreEqual (1999, time.Year, "#A1");
143 Assert.AreEqual (12, time.Month, "#A2");
144 Assert.AreEqual (31, time.Day, "#A3");
146 time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
147 Assert.AreEqual (1999, time.Year, "#B1");
148 Assert.AreEqual (12, time.Month, "#B2");
149 Assert.AreEqual (31, time.Day, "#B3");
150 Assert.AreEqual (11, time.Hour, "#B4");
152 info.CreationTimeUtc = new DateTime (1999, 12, 31, 11, 59, 59);
154 time = TimeZone.CurrentTimeZone.ToUniversalTime (info.CreationTime);
155 Assert.AreEqual (1999, time.Year, "#C1");
156 Assert.AreEqual (12, time.Month, "#C2");
157 Assert.AreEqual (31, time.Day, "#C3");
159 time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
160 Assert.AreEqual (1999, time.Year, "#D1");
161 Assert.AreEqual (12, time.Month, "#D2");
162 Assert.AreEqual (31, time.Day, "#D3");
169 [Category("TargetJvmNotSupported")] // CreationTime not supported for TARGET_JVM
170 public void CreationTimeNoFileOrDirectory ()
172 string path = TempFolder + DSC + "FSIT.CreationTimeNoFile.Test";
177 FileSystemInfo info = new FileInfo (path);
179 DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.CreationTime);
180 Assert.AreEqual (1601, time.Year, "#A1");
181 Assert.AreEqual (1, time.Month, "#A2");
182 Assert.AreEqual (1, time.Day, "#A3");
183 Assert.AreEqual (0, time.Hour, "#A4");
184 Assert.AreEqual (0, time.Minute, "#A5");
185 Assert.AreEqual (0, time.Second, "#A6");
186 Assert.AreEqual (0, time.Millisecond, "#A7");
188 info = new DirectoryInfo (path);
190 time = TimeZone.CurrentTimeZone.ToUniversalTime(info.CreationTime);
191 Assert.AreEqual (1601, time.Year, "#B1");
192 Assert.AreEqual (1, time.Month, "#B2");
193 Assert.AreEqual (1, time.Day, "#B3");
194 Assert.AreEqual (0, time.Hour, "#B4");
195 Assert.AreEqual (0, time.Minute, "#B5");
196 Assert.AreEqual (0, time.Second, "#B6");
197 Assert.AreEqual (0, time.Millisecond, "#B7");
205 public void Extenssion ()
207 string path = TempFolder + DSC + "FSIT.Extenssion.Test";
211 FileSystemInfo info = new FileInfo (path);
212 Assert.AreEqual (".Test", info.Extension);
219 [Category("TargetJvmNotSupported")] // LastAccessTime not supported for TARGET_JVM
220 public void DefaultLastAccessTime ()
222 string path = TempFolder + DSC + "FSIT.DefaultLastAccessTime.Test";
226 FileSystemInfo info = new FileInfo (path);
227 DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.LastAccessTime);
229 Assert.AreEqual (1601, time.Year, "#1");
230 Assert.AreEqual (1, time.Month, "#2");
231 Assert.AreEqual (1, time.Day, "#3");
232 Assert.AreEqual (0, time.Hour, "#4");
233 Assert.AreEqual (0, time.Minute, "#5");
234 Assert.AreEqual (0, time.Second, "#6");
235 Assert.AreEqual (0, time.Millisecond, "#7");
242 [Category("TargetJvmNotSupported")] // LastAccessTime not supported for TARGET_JVM
243 public void LastAccessTime ()
245 string path = TempFolder + DSC + "FSIT.LastAccessTime.Test";
249 File.Create (path).Close ();
250 FileSystemInfo info = new FileInfo (path);
252 info = new FileInfo (path);
254 info.LastAccessTime = new DateTime (2000, 1, 1, 1, 1, 1);
255 time = info.LastAccessTime;
256 Assert.AreEqual (2000, time.Year, "#A1");
257 Assert.AreEqual (1, time.Month, "#A2");
258 Assert.AreEqual (1, time.Day, "#A3");
259 Assert.AreEqual (1, time.Hour, "#A4");
261 time = TimeZone.CurrentTimeZone.ToLocalTime (info.LastAccessTimeUtc);
262 Assert.AreEqual (2000, time.Year, "#B1");
263 Assert.AreEqual (1, time.Month, "#B2");
264 Assert.AreEqual (1, time.Day, "#B3");
265 Assert.AreEqual (1, time.Hour, "#B4");
267 info.LastAccessTimeUtc = new DateTime (2000, 1, 1, 1, 1, 1);
268 time = TimeZone.CurrentTimeZone.ToUniversalTime (info.LastAccessTime);
269 Assert.AreEqual (2000, time.Year, "#C1");
270 Assert.AreEqual (1, time.Month, "#C2");
271 Assert.AreEqual (1, time.Day, "#C3");
272 Assert.AreEqual (1, time.Hour, "#C4");
274 time = info.LastAccessTimeUtc;
275 Assert.AreEqual (2000, time.Year, "#D1");
276 Assert.AreEqual (1, time.Month, "#D2");
277 Assert.AreEqual (1, time.Day, "#D3");
278 Assert.AreEqual (1, time.Hour, "#D4");
285 [Category("TargetJvmNotSupported")] // LastAccessTime not supported for TARGET_JVM
286 public void DefaultLastWriteTime ()
288 string path = TempFolder + DSC + "FSIT.DefaultLastWriteTime.Test";
293 FileSystemInfo info = new DirectoryInfo (path);
294 DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.LastWriteTime);
296 Assert.AreEqual (1601, time.Year, "#1");
297 Assert.AreEqual (1, time.Month, "#2");
298 Assert.AreEqual (1, time.Day, "#3");
299 Assert.AreEqual (0, time.Hour, "#4");
300 Assert.AreEqual (0, time.Minute, "#5");
301 Assert.AreEqual (0, time.Second, "#6");
302 Assert.AreEqual (0, time.Millisecond, "#7");
309 public void LastWriteTime ()
311 string path = TempFolder + DSC + "FSIT.LastWriteTime.Test";
315 FileSystemInfo info = Directory.CreateDirectory (path);
317 info.LastWriteTime = new DateTime (2000, 1, 1, 1, 1, 1);
318 DateTime time = info.LastWriteTime;
320 Assert.AreEqual (2000, time.Year, "#A1");
321 Assert.AreEqual (1, time.Month, "#A2");
322 Assert.AreEqual (1, time.Day, "#A3");
323 Assert.AreEqual (1, time.Hour, "#A4");
325 time = info.LastWriteTimeUtc.ToLocalTime ();
326 Assert.AreEqual (2000, time.Year, "#B1");
327 Assert.AreEqual (1, time.Month, "#B2");
328 Assert.AreEqual (1, time.Day, "#B3");
329 Assert.AreEqual (1, time.Hour, "#B4");
331 info.LastWriteTimeUtc = new DateTime (2000, 1, 1, 1, 1, 1);
332 time = info.LastWriteTimeUtc;
333 Assert.AreEqual (2000, time.Year, "#C1");
334 Assert.AreEqual (1, time.Month, "#C2");
335 Assert.AreEqual (1, time.Day, "#C3");
336 Assert.AreEqual (1, time.Hour, "#C4");
338 time = info.LastWriteTime.ToUniversalTime ();
339 Assert.AreEqual (2000, time.Year, "#D1");
340 Assert.AreEqual (1, time.Month, "#D2");
341 Assert.AreEqual (1, time.Day, "#D3");
342 Assert.AreEqual (1, time.Hour, "#D4");
349 public void Serialization ()
351 string path = TempFolder + DSC + "FSIT.Serialization.Test";
355 FileSystemInfo info = Directory.CreateDirectory (path);
357 SerializationInfo si = new SerializationInfo (
358 typeof (FileSystemInfo), new FormatterConverter ());
359 info.GetObjectData (si, new StreamingContext ());
361 Assert.AreEqual (2, si.MemberCount, "#1");
362 Assert.AreEqual ("FSIT.Serialization.Test", si.GetString ("OriginalPath"), "#2");
363 Assert.AreEqual (path, si.GetString ("FullPath"), "#3");
370 public void Deserialization ()
372 string path = TempFolder + DSC + "FSIT.Deserialization.Test";
376 FileSystemInfo info = Directory.CreateDirectory (path);
378 MemoryStream ms = new MemoryStream ();
379 BinaryFormatter bf = new BinaryFormatter ();
380 bf.Serialize (ms, info);
383 FileSystemInfo clone = (FileSystemInfo) bf.Deserialize (ms);
384 Assert.AreEqual (clone.FullName, info.FullName);