FileSystemInfoTest.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. // FileSystemInfoTest.cs - NUnit Test Cases for System.IO.FileSystemInfo class
  2. //
  3. // Ville Palo ([email protected])
  4. //
  5. // (C) 2003 Ville Palo
  6. //
  7. using System;
  8. using System.Globalization;
  9. using System.IO;
  10. using System.Runtime.Serialization;
  11. using System.Runtime.Serialization.Formatters.Binary;
  12. using System.Threading;
  13. using NUnit.Framework;
  14. namespace MonoTests.System.IO
  15. {
  16. [TestFixture]
  17. public class FileSystemInfoTest
  18. {
  19. CultureInfo old_culture;
  20. string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
  21. static readonly char DSC = Path.DirectorySeparatorChar;
  22. [SetUp]
  23. public void SetUp()
  24. {
  25. if (Directory.Exists (TempFolder))
  26. Directory.Delete (TempFolder, true);
  27. Directory.CreateDirectory (TempFolder);
  28. old_culture = Thread.CurrentThread.CurrentCulture;
  29. Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US", false);
  30. }
  31. [TearDown]
  32. public void TearDown()
  33. {
  34. if (Directory.Exists (TempFolder))
  35. Directory.Delete (TempFolder, true);
  36. Thread.CurrentThread.CurrentCulture = old_culture;
  37. }
  38. bool Windows {
  39. get {
  40. return Path.DirectorySeparatorChar == '\\';
  41. }
  42. }
  43. bool Unix {
  44. get {
  45. return Path.DirectorySeparatorChar == '/';
  46. }
  47. }
  48. bool Mac {
  49. get {
  50. return Path.DirectorySeparatorChar == ':';
  51. }
  52. }
  53. private void DeleteFile (string path)
  54. {
  55. if (File.Exists (path))
  56. File.Delete (path);
  57. }
  58. private void DeleteDir (string path)
  59. {
  60. if (Directory.Exists (path))
  61. Directory.Delete (path, true);
  62. }
  63. [Test]
  64. [Category("TargetJvmNotSupported")] // CreationTime not supported for TARGET_JVM
  65. public void CreationTimeFile ()
  66. {
  67. if (Unix)
  68. Assert.Ignore ("Unix doesn't support CreationTimes");
  69. string path = TempFolder + DSC + "FSIT.CreationTime.Test";
  70. DeleteFile (path);
  71. try {
  72. File.Create (path).Close ();
  73. FileSystemInfo info = new FileInfo (path);
  74. info.CreationTime = new DateTime (1999, 12, 31, 11, 59, 59);
  75. DateTime time = info.CreationTime;
  76. Assert.AreEqual (1999, time.Year, "#A1");
  77. Assert.AreEqual (12, time.Month, "#A2");
  78. Assert.AreEqual (31, time.Day, "#A3");
  79. Assert.AreEqual (11, time.Hour, "#A4");
  80. Assert.AreEqual (59, time.Minute, "#A5");
  81. Assert.AreEqual (59, time.Second, "#A6");
  82. time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
  83. Assert.AreEqual (1999, time.Year, "#B1");
  84. Assert.AreEqual (12, time.Month, "#B2");
  85. Assert.AreEqual (31, time.Day, "#B3");
  86. Assert.AreEqual (11, time.Hour, "#B4");
  87. Assert.AreEqual (59, time.Minute, "#B5");
  88. Assert.AreEqual (59, time.Second, "#B6");
  89. info.CreationTimeUtc = new DateTime (1999, 12, 31, 11, 59, 59);
  90. time = TimeZone.CurrentTimeZone.ToUniversalTime (info.CreationTime);
  91. Assert.AreEqual (1999, time.Year, "#C1");
  92. Assert.AreEqual (12, time.Month, "#C2");
  93. Assert.AreEqual (31, time.Day, "#C3");
  94. Assert.AreEqual (11, time.Hour, "#C4");
  95. Assert.AreEqual (59, time.Minute, "#C5");
  96. Assert.AreEqual (59, time.Second, "#C6");
  97. time = info.CreationTimeUtc;
  98. Assert.AreEqual (1999, time.Year, "#D1");
  99. Assert.AreEqual (12, time.Month, "#D2");
  100. Assert.AreEqual (31, time.Day, "#D3");
  101. Assert.AreEqual (11, time.Hour, "#D4");
  102. Assert.AreEqual (59, time.Minute, "#D5");
  103. Assert.AreEqual (59, time.Second, "#D6");
  104. } finally {
  105. DeleteFile (path);
  106. }
  107. }
  108. [Test]
  109. [Category("TargetJvmNotSupported")] // CreationTime not supported for TARGET_JVM
  110. public void CreationTimeDirectory ()
  111. {
  112. if (Unix)
  113. Assert.Ignore ("Unix doesn't support CreationTimes");
  114. string path = TempFolder + DSC + "FSIT.CreationTimeDirectory.Test";
  115. DeleteDir (path);
  116. try {
  117. FileSystemInfo info = Directory.CreateDirectory (path);
  118. info.CreationTime = new DateTime (1999, 12, 31, 11, 59, 59);
  119. DateTime time = info.CreationTime;
  120. Assert.AreEqual (1999, time.Year, "#A1");
  121. Assert.AreEqual (12, time.Month, "#A2");
  122. Assert.AreEqual (31, time.Day, "#A3");
  123. time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
  124. Assert.AreEqual (1999, time.Year, "#B1");
  125. Assert.AreEqual (12, time.Month, "#B2");
  126. Assert.AreEqual (31, time.Day, "#B3");
  127. Assert.AreEqual (11, time.Hour, "#B4");
  128. info.CreationTimeUtc = new DateTime (1999, 12, 31, 11, 59, 59);
  129. time = TimeZone.CurrentTimeZone.ToUniversalTime (info.CreationTime);
  130. Assert.AreEqual (1999, time.Year, "#C1");
  131. Assert.AreEqual (12, time.Month, "#C2");
  132. Assert.AreEqual (31, time.Day, "#C3");
  133. time = TimeZone.CurrentTimeZone.ToLocalTime (info.CreationTimeUtc);
  134. Assert.AreEqual (1999, time.Year, "#D1");
  135. Assert.AreEqual (12, time.Month, "#D2");
  136. Assert.AreEqual (31, time.Day, "#D3");
  137. } finally {
  138. DeleteDir (path);
  139. }
  140. }
  141. [Test]
  142. [Category("TargetJvmNotSupported")] // CreationTime not supported for TARGET_JVM
  143. public void CreationTimeNoFileOrDirectory ()
  144. {
  145. string path = TempFolder + DSC + "FSIT.CreationTimeNoFile.Test";
  146. DeleteFile (path);
  147. DeleteDir (path);
  148. try {
  149. FileSystemInfo info = new FileInfo (path);
  150. DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.CreationTime);
  151. Assert.AreEqual (1601, time.Year, "#A1");
  152. Assert.AreEqual (1, time.Month, "#A2");
  153. Assert.AreEqual (1, time.Day, "#A3");
  154. Assert.AreEqual (0, time.Hour, "#A4");
  155. Assert.AreEqual (0, time.Minute, "#A5");
  156. Assert.AreEqual (0, time.Second, "#A6");
  157. Assert.AreEqual (0, time.Millisecond, "#A7");
  158. info = new DirectoryInfo (path);
  159. time = TimeZone.CurrentTimeZone.ToUniversalTime(info.CreationTime);
  160. Assert.AreEqual (1601, time.Year, "#B1");
  161. Assert.AreEqual (1, time.Month, "#B2");
  162. Assert.AreEqual (1, time.Day, "#B3");
  163. Assert.AreEqual (0, time.Hour, "#B4");
  164. Assert.AreEqual (0, time.Minute, "#B5");
  165. Assert.AreEqual (0, time.Second, "#B6");
  166. Assert.AreEqual (0, time.Millisecond, "#B7");
  167. } finally {
  168. DeleteFile (path);
  169. DeleteDir (path);
  170. }
  171. }
  172. [Test]
  173. public void Extenssion ()
  174. {
  175. string path = TempFolder + DSC + "FSIT.Extenssion.Test";
  176. DeleteFile (path);
  177. try {
  178. FileSystemInfo info = new FileInfo (path);
  179. Assert.AreEqual (".Test", info.Extension);
  180. } finally {
  181. DeleteFile (path);
  182. }
  183. }
  184. [Test]
  185. [Category("TargetJvmNotSupported")] // LastAccessTime not supported for TARGET_JVM
  186. public void DefaultLastAccessTime ()
  187. {
  188. string path = TempFolder + DSC + "FSIT.DefaultLastAccessTime.Test";
  189. DeleteFile (path);
  190. try {
  191. FileSystemInfo info = new FileInfo (path);
  192. DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.LastAccessTime);
  193. Assert.AreEqual (1601, time.Year, "#1");
  194. Assert.AreEqual (1, time.Month, "#2");
  195. Assert.AreEqual (1, time.Day, "#3");
  196. Assert.AreEqual (0, time.Hour, "#4");
  197. Assert.AreEqual (0, time.Minute, "#5");
  198. Assert.AreEqual (0, time.Second, "#6");
  199. Assert.AreEqual (0, time.Millisecond, "#7");
  200. } finally {
  201. DeleteFile (path);
  202. }
  203. }
  204. [Test]
  205. [Category("TargetJvmNotSupported")] // LastAccessTime not supported for TARGET_JVM
  206. public void LastAccessTime ()
  207. {
  208. string path = TempFolder + DSC + "FSIT.LastAccessTime.Test";
  209. DeleteFile (path);
  210. try {
  211. File.Create (path).Close ();
  212. FileSystemInfo info = new FileInfo (path);
  213. DateTime time;
  214. info = new FileInfo (path);
  215. info.LastAccessTime = new DateTime (2000, 1, 1, 1, 1, 1);
  216. time = info.LastAccessTime;
  217. Assert.AreEqual (2000, time.Year, "#A1");
  218. Assert.AreEqual (1, time.Month, "#A2");
  219. Assert.AreEqual (1, time.Day, "#A3");
  220. Assert.AreEqual (1, time.Hour, "#A4");
  221. time = TimeZone.CurrentTimeZone.ToLocalTime (info.LastAccessTimeUtc);
  222. Assert.AreEqual (2000, time.Year, "#B1");
  223. Assert.AreEqual (1, time.Month, "#B2");
  224. Assert.AreEqual (1, time.Day, "#B3");
  225. Assert.AreEqual (1, time.Hour, "#B4");
  226. info.LastAccessTimeUtc = new DateTime (2000, 1, 1, 1, 1, 1);
  227. time = TimeZone.CurrentTimeZone.ToUniversalTime (info.LastAccessTime);
  228. Assert.AreEqual (2000, time.Year, "#C1");
  229. Assert.AreEqual (1, time.Month, "#C2");
  230. Assert.AreEqual (1, time.Day, "#C3");
  231. Assert.AreEqual (1, time.Hour, "#C4");
  232. time = info.LastAccessTimeUtc;
  233. Assert.AreEqual (2000, time.Year, "#D1");
  234. Assert.AreEqual (1, time.Month, "#D2");
  235. Assert.AreEqual (1, time.Day, "#D3");
  236. Assert.AreEqual (1, time.Hour, "#D4");
  237. } finally {
  238. DeleteFile (path);
  239. }
  240. }
  241. [Test]
  242. [Category("TargetJvmNotSupported")] // LastAccessTime not supported for TARGET_JVM
  243. public void DefaultLastWriteTime ()
  244. {
  245. string path = TempFolder + DSC + "FSIT.DefaultLastWriteTime.Test";
  246. DeleteDir (path);
  247. try {
  248. FileSystemInfo info = new DirectoryInfo (path);
  249. DateTime time = TimeZone.CurrentTimeZone.ToUniversalTime(info.LastWriteTime);
  250. Assert.AreEqual (1601, time.Year, "#1");
  251. Assert.AreEqual (1, time.Month, "#2");
  252. Assert.AreEqual (1, time.Day, "#3");
  253. Assert.AreEqual (0, time.Hour, "#4");
  254. Assert.AreEqual (0, time.Minute, "#5");
  255. Assert.AreEqual (0, time.Second, "#6");
  256. Assert.AreEqual (0, time.Millisecond, "#7");
  257. } finally {
  258. DeleteDir (path);
  259. }
  260. }
  261. [Test]
  262. public void LastWriteTime ()
  263. {
  264. string path = TempFolder + DSC + "FSIT.LastWriteTime.Test";
  265. DeleteDir (path);
  266. try {
  267. FileSystemInfo info = Directory.CreateDirectory (path);
  268. info.LastWriteTime = new DateTime (2000, 1, 1, 1, 1, 1);
  269. DateTime time = info.LastWriteTime;
  270. Assert.AreEqual (2000, time.Year, "#A1");
  271. Assert.AreEqual (1, time.Month, "#A2");
  272. Assert.AreEqual (1, time.Day, "#A3");
  273. Assert.AreEqual (1, time.Hour, "#A4");
  274. time = info.LastWriteTimeUtc.ToLocalTime ();
  275. Assert.AreEqual (2000, time.Year, "#B1");
  276. Assert.AreEqual (1, time.Month, "#B2");
  277. Assert.AreEqual (1, time.Day, "#B3");
  278. Assert.AreEqual (1, time.Hour, "#B4");
  279. info.LastWriteTimeUtc = new DateTime (2000, 1, 1, 1, 1, 1);
  280. time = info.LastWriteTimeUtc;
  281. Assert.AreEqual (2000, time.Year, "#C1");
  282. Assert.AreEqual (1, time.Month, "#C2");
  283. Assert.AreEqual (1, time.Day, "#C3");
  284. Assert.AreEqual (1, time.Hour, "#C4");
  285. time = info.LastWriteTime.ToUniversalTime ();
  286. Assert.AreEqual (2000, time.Year, "#D1");
  287. Assert.AreEqual (1, time.Month, "#D2");
  288. Assert.AreEqual (1, time.Day, "#D3");
  289. Assert.AreEqual (1, time.Hour, "#D4");
  290. } finally {
  291. DeleteDir (path);
  292. }
  293. }
  294. #if !MOBILE
  295. [Test]
  296. public void Serialization ()
  297. {
  298. string path = TempFolder + DSC + "FSIT.Serialization.Test";
  299. DeleteDir (path);
  300. try {
  301. FileSystemInfo info = Directory.CreateDirectory (path);
  302. SerializationInfo si = new SerializationInfo (
  303. typeof (FileSystemInfo), new FormatterConverter ());
  304. info.GetObjectData (si, new StreamingContext ());
  305. Assert.AreEqual (2, si.MemberCount, "#1");
  306. Assert.AreEqual ("FSIT.Serialization.Test", si.GetString ("OriginalPath"), "#2");
  307. Assert.AreEqual (path, si.GetString ("FullPath"), "#3");
  308. } finally {
  309. DeleteDir (path);
  310. }
  311. }
  312. [Test]
  313. public void Deserialization ()
  314. {
  315. string path = TempFolder + DSC + "FSIT.Deserialization.Test";
  316. DeleteDir (path);
  317. try {
  318. FileSystemInfo info = Directory.CreateDirectory (path);
  319. MemoryStream ms = new MemoryStream ();
  320. BinaryFormatter bf = new BinaryFormatter ();
  321. bf.Serialize (ms, info);
  322. ms.Position = 0;
  323. FileSystemInfo clone = (FileSystemInfo) bf.Deserialize (ms);
  324. Assert.AreEqual (clone.FullName, info.FullName);
  325. } finally {
  326. DeleteDir (path);
  327. }
  328. }
  329. #endif
  330. }
  331. }