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 public void CreationTimeFile ()
78 Assert.Ignore ("Unix doesn't support CreationTimes");
80 string path = TempFolder + DSC + "FSIT.CreationTime.Test";
84 File.Create (path).Close ();
85 FileSystemInfo info = new FileInfo (path);
86 info.CreationTime = new DateTime (1999, 12, 31, 11, 59, 59);
88 DateTime time = info.CreationTime;
89 Assert.AreEqual (1999, time.Year, "#A1");
90 Assert.AreEqual (12, time.Month, "#A2");
91 Assert.AreEqual (31, time.Day, "#A3");
92 Assert.AreEqual (11, time.Hour, "#A4");
93 Assert.AreEqual (59, time.Minute, "#A5");
94 Assert.AreEqual (59, time.Second, "#A6");
96 time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
97 Assert.AreEqual (1999, time.Year, "#B1");
98 Assert.AreEqual (12, time.Month, "#B2");
99 Assert.AreEqual (31, time.Day, "#B3");
100 Assert.AreEqual (11, time.Hour, "#B4");
101 Assert.AreEqual (59, time.Minute, "#B5");
102 Assert.AreEqual (59, time.Second, "#B6");
104 info.CreationTimeUtc = new DateTime (1999, 12, 31, 11, 59, 59);
106 time = TimeZone.CurrentTimeZone.ToUniversalTime (info.CreationTime);
107 Assert.AreEqual (1999, time.Year, "#C1");
108 Assert.AreEqual (12, time.Month, "#C2");
109 Assert.AreEqual (31, time.Day, "#C3");
110 Assert.AreEqual (11, time.Hour, "#C4");
111 Assert.AreEqual (59, time.Minute, "#C5");
112 Assert.AreEqual (59, time.Second, "#C6");
114 time = info.CreationTimeUtc;
115 Assert.AreEqual (1999, time.Year, "#D1");
116 Assert.AreEqual (12, time.Month, "#D2");
117 Assert.AreEqual (31, time.Day, "#D3");
118 Assert.AreEqual (11, time.Hour, "#D4");
119 Assert.AreEqual (59, time.Minute, "#D5");
120 Assert.AreEqual (59, time.Second, "#D6");
127 public void CreationTimeDirectory ()
130 Assert.Ignore ("Unix doesn't support CreationTimes");
132 string path = TempFolder + DSC + "FSIT.CreationTimeDirectory.Test";
136 FileSystemInfo info = Directory.CreateDirectory (path);
137 info.CreationTime = new DateTime (1999, 12, 31, 11, 59, 59);
138 DateTime time = info.CreationTime;
140 Assert.AreEqual (1999, time.Year, "#A1");
141 Assert.AreEqual (12, time.Month, "#A2");
142 Assert.AreEqual (31, time.Day, "#A3");
144 time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
145 Assert.AreEqual (1999, time.Year, "#B1");
146 Assert.AreEqual (12, time.Month, "#B2");
147 Assert.AreEqual (31, time.Day, "#B3");
148 Assert.AreEqual (11, time.Hour, "#B4");
150 info.CreationTimeUtc = new DateTime (1999, 12, 31, 11, 59, 59);
152 time = TimeZone.CurrentTimeZone.ToUniversalTime (info.CreationTime);
153 Assert.AreEqual (1999, time.Year, "#C1");
154 Assert.AreEqual (12, time.Month, "#C2");
155 Assert.AreEqual (31, time.Day, "#C3");
157 time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
158 Assert.AreEqual (1999, time.Year, "#D1");
159 Assert.AreEqual (12, time.Month, "#D2");
160 Assert.AreEqual (31, time.Day, "#D3");
167 public void CreationTimeNoFileOrDirectory ()
169 string path = TempFolder + DSC + "FSIT.CreationTimeNoFile.Test";
174 FileSystemInfo info = new FileInfo (path);
176 DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.CreationTime);
177 Assert.AreEqual (1601, time.Year, "#A1");
178 Assert.AreEqual (1, time.Month, "#A2");
179 Assert.AreEqual (1, time.Day, "#A3");
180 Assert.AreEqual (0, time.Hour, "#A4");
181 Assert.AreEqual (0, time.Minute, "#A5");
182 Assert.AreEqual (0, time.Second, "#A6");
183 Assert.AreEqual (0, time.Millisecond, "#A7");
185 info = new DirectoryInfo (path);
187 time = TimeZone.CurrentTimeZone.ToUniversalTime(info.CreationTime);
188 Assert.AreEqual (1601, time.Year, "#B1");
189 Assert.AreEqual (1, time.Month, "#B2");
190 Assert.AreEqual (1, time.Day, "#B3");
191 Assert.AreEqual (0, time.Hour, "#B4");
192 Assert.AreEqual (0, time.Minute, "#B5");
193 Assert.AreEqual (0, time.Second, "#B6");
194 Assert.AreEqual (0, time.Millisecond, "#B7");
202 public void Extenssion ()
204 string path = TempFolder + DSC + "FSIT.Extenssion.Test";
208 FileSystemInfo info = new FileInfo (path);
209 Assert.AreEqual (".Test", info.Extension);
216 public void DefaultLastAccessTime ()
218 string path = TempFolder + DSC + "FSIT.DefaultLastAccessTime.Test";
222 FileSystemInfo info = new FileInfo (path);
223 DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.LastAccessTime);
225 Assert.AreEqual (1601, time.Year, "#1");
226 Assert.AreEqual (1, time.Month, "#2");
227 Assert.AreEqual (1, time.Day, "#3");
228 Assert.AreEqual (0, time.Hour, "#4");
229 Assert.AreEqual (0, time.Minute, "#5");
230 Assert.AreEqual (0, time.Second, "#6");
231 Assert.AreEqual (0, time.Millisecond, "#7");
238 public void LastAccessTime ()
240 string path = TempFolder + DSC + "FSIT.LastAccessTime.Test";
244 File.Create (path).Close ();
245 FileSystemInfo info = new FileInfo (path);
247 info = new FileInfo (path);
249 info.LastAccessTime = new DateTime (2000, 1, 1, 1, 1, 1);
250 time = info.LastAccessTime;
251 Assert.AreEqual (2000, time.Year, "#A1");
252 Assert.AreEqual (1, time.Month, "#A2");
253 Assert.AreEqual (1, time.Day, "#A3");
254 Assert.AreEqual (1, time.Hour, "#A4");
256 time = TimeZone.CurrentTimeZone.ToLocalTime (info.LastAccessTimeUtc);
257 Assert.AreEqual (2000, time.Year, "#B1");
258 Assert.AreEqual (1, time.Month, "#B2");
259 Assert.AreEqual (1, time.Day, "#B3");
260 Assert.AreEqual (1, time.Hour, "#B4");
262 info.LastAccessTimeUtc = new DateTime (2000, 1, 1, 1, 1, 1);
263 time = TimeZone.CurrentTimeZone.ToUniversalTime (info.LastAccessTime);
264 Assert.AreEqual (2000, time.Year, "#C1");
265 Assert.AreEqual (1, time.Month, "#C2");
266 Assert.AreEqual (1, time.Day, "#C3");
267 Assert.AreEqual (1, time.Hour, "#C4");
269 time = info.LastAccessTimeUtc;
270 Assert.AreEqual (2000, time.Year, "#D1");
271 Assert.AreEqual (1, time.Month, "#D2");
272 Assert.AreEqual (1, time.Day, "#D3");
273 Assert.AreEqual (1, time.Hour, "#D4");
280 public void DefaultLastWriteTime ()
282 string path = TempFolder + DSC + "FSIT.DefaultLastWriteTime.Test";
287 FileSystemInfo info = new DirectoryInfo (path);
288 DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.LastWriteTime);
290 Assert.AreEqual (1601, time.Year, "#1");
291 Assert.AreEqual (1, time.Month, "#2");
292 Assert.AreEqual (1, time.Day, "#3");
293 Assert.AreEqual (0, time.Hour, "#4");
294 Assert.AreEqual (0, time.Minute, "#5");
295 Assert.AreEqual (0, time.Second, "#6");
296 Assert.AreEqual (0, time.Millisecond, "#7");
303 public void LastWriteTime ()
305 string path = TempFolder + DSC + "FSIT.LastWriteTime.Test";
309 FileSystemInfo info = Directory.CreateDirectory (path);
311 info.LastWriteTime = new DateTime (2000, 1, 1, 1, 1, 1);
312 DateTime time = info.LastWriteTime;
314 Assert.AreEqual (2000, time.Year, "#A1");
315 Assert.AreEqual (1, time.Month, "#A2");
316 Assert.AreEqual (1, time.Day, "#A3");
317 Assert.AreEqual (1, time.Hour, "#A4");
319 time = info.LastWriteTimeUtc.ToLocalTime ();
320 Assert.AreEqual (2000, time.Year, "#B1");
321 Assert.AreEqual (1, time.Month, "#B2");
322 Assert.AreEqual (1, time.Day, "#B3");
323 Assert.AreEqual (1, time.Hour, "#B4");
325 info.LastWriteTimeUtc = new DateTime (2000, 1, 1, 1, 1, 1);
326 time = info.LastWriteTimeUtc;
327 Assert.AreEqual (2000, time.Year, "#C1");
328 Assert.AreEqual (1, time.Month, "#C2");
329 Assert.AreEqual (1, time.Day, "#C3");
330 Assert.AreEqual (1, time.Hour, "#C4");
332 time = info.LastWriteTime.ToUniversalTime ();
333 Assert.AreEqual (2000, time.Year, "#D1");
334 Assert.AreEqual (1, time.Month, "#D2");
335 Assert.AreEqual (1, time.Day, "#D3");
336 Assert.AreEqual (1, time.Hour, "#D4");
343 public void Serialization ()
345 string path = TempFolder + DSC + "FSIT.Serialization.Test";
349 FileSystemInfo info = Directory.CreateDirectory (path);
351 SerializationInfo si = new SerializationInfo (
352 typeof (FileSystemInfo), new FormatterConverter ());
353 info.GetObjectData (si, new StreamingContext ());
355 Assert.AreEqual (2, si.MemberCount, "#1");
356 Assert.AreEqual ("FSIT.Serialization.Test", si.GetString ("OriginalPath"), "#2");
357 Assert.AreEqual (path, si.GetString ("FullPath"), "#3");
364 public void Deserialization ()
366 string path = TempFolder + DSC + "FSIT.Deserialization.Test";
370 FileSystemInfo info = Directory.CreateDirectory (path);
372 MemoryStream ms = new MemoryStream ();
373 BinaryFormatter bf = new BinaryFormatter ();
374 bf.Serialize (ms, info);
377 FileSystemInfo clone = (FileSystemInfo) bf.Deserialize (ms);
378 Assert.AreEqual (clone.FullName, info.FullName);