DateAndTimeTest.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. // Collection.cs - NUnit Test Cases for Microsoft.VisualBasic.Collection
  2. //
  3. // Author:
  4. // Chris J. Breisch ([email protected])
  5. //
  6. // (C) Chris J. Breisch
  7. //
  8. using NUnit.Framework;
  9. using System;
  10. using System.Threading;
  11. using System.Globalization;
  12. using Microsoft.VisualBasic;
  13. namespace MonoTests.Microsoft.VisualBasic
  14. {
  15. public class DateAndTimeTest : TestCase {
  16. private CultureInfo oldcult;
  17. public DateAndTimeTest() : base ("Microsoft.VisualBasic.DateAndTime") {}
  18. public DateAndTimeTest(string name) : base(name) {}
  19. protected override void SetUp()
  20. {
  21. // the current culture determines the result of formatting
  22. oldcult = Thread.CurrentThread.CurrentCulture;
  23. Thread.CurrentThread.CurrentCulture = new CultureInfo ("");
  24. }
  25. protected override void TearDown ()
  26. {
  27. Thread.CurrentThread.CurrentCulture = oldcult;
  28. }
  29. public static ITest Suite {
  30. get {
  31. return new TestSuite(typeof(DateAndTimeTest));
  32. }
  33. }
  34. public void TestDateString() {
  35. string s = DateAndTime.DateString;
  36. DateTime dtNow = DateTime.Today;
  37. AssertEquals("#DS01", dtNow.ToShortDateString(), DateTime.Parse(s).ToShortDateString());
  38. // TODO: Add a test for setting the date string too
  39. }
  40. public void TestToday() {
  41. AssertEquals("#TO01", DateTime.Today, DateAndTime.Today);
  42. // TODO: Add a test for setting Today
  43. }
  44. public void TestTimer() {
  45. double secTimer = DateAndTime.Timer;
  46. DateTime dtNow = DateTime.Now;
  47. double secNow = dtNow.Hour * 3600 + dtNow.Minute * 60 + dtNow.Second + (dtNow.Millisecond + 1) / 1000D;
  48. double secTimer2 = DateAndTime.Timer + .001;
  49. // waste a little time
  50. for (int i = 0; i < int.MaxValue; i++);
  51. // get another timer
  52. double secTimer3 = DateAndTime.Timer;
  53. // should be same time within a reasonable tolerance
  54. Assert("#TI01", secNow >= secTimer);
  55. Assert("#TI02: SecTimer2=" + secTimer2 + " secNow=" + secNow, secTimer2 >= secNow);
  56. // third timer should be greater than the first
  57. Assert("#TI03", secTimer3 > secTimer);
  58. }
  59. public void TestNow() {
  60. DateTime dtNow = DateTime.Now;
  61. DateTime dtTest = DateAndTime.Now;
  62. DateTime dtNow2 = DateTime.Now;
  63. Assert("#N01", dtTest >= dtNow);
  64. Assert("#N02", dtNow2 >= dtTest);
  65. }
  66. public void TestTimeOfDay() {
  67. DateTime dtNow = DateTime.Now;
  68. TimeSpan tsNow = new TimeSpan(dtNow.Hour, dtNow.Minute, dtNow.Second);
  69. DateTime dtTest = DateAndTime.TimeOfDay;
  70. TimeSpan tsTest = new TimeSpan(dtTest.Hour, dtTest.Minute, dtTest.Second);
  71. DateTime dtNow2 = DateTime.Now;
  72. TimeSpan tsNow2 = new TimeSpan(dtNow2.Hour, dtNow2.Minute, dtNow2.Second);
  73. Assert("#TOD01", tsTest.Ticks >= tsNow.Ticks);
  74. Assert("#TOD02", tsNow2.Ticks >= tsTest.Ticks);
  75. // TODO: add a test case for setting time of day
  76. }
  77. public void TestTimeString() {
  78. DateTime dtNow = DateTime.Now;
  79. TimeSpan tsNow = new TimeSpan(dtNow.Hour, dtNow.Minute, dtNow.Second);
  80. string s = DateAndTime.TimeString;
  81. DateTime dtTest = DateTime.Parse(s);
  82. TimeSpan tsTest = new TimeSpan(dtTest.Hour, dtTest.Minute, dtTest.Second);
  83. DateTime dtNow2 = DateTime.Now;
  84. TimeSpan tsNow2 = new TimeSpan(dtNow2.Hour, dtNow2.Minute, dtNow2.Second);
  85. Assert("#TS01", tsTest.Ticks >= tsNow.Ticks);
  86. Assert("#TS02", tsNow2.Ticks >= tsTest.Ticks);
  87. // TODO: add a test case for setting TimeString
  88. }
  89. public void TestDateAdd() {
  90. DateTime dtNow = DateTime.Now;
  91. AssertEquals("#DA01", dtNow.AddYears(1), DateAndTime.DateAdd(DateInterval.Year, 1, dtNow));
  92. AssertEquals("#DA02", dtNow.AddYears(-1), DateAndTime.DateAdd("yyyy", -1, dtNow));
  93. bool caughtException = false;
  94. try {
  95. DateAndTime.DateAdd("foo", 1, dtNow);
  96. }
  97. catch (Exception e) {
  98. AssertEquals("#DA03", e.GetType(), typeof(ArgumentException));
  99. caughtException = true;
  100. }
  101. AssertEquals("#DA04", caughtException, true);
  102. AssertEquals("#DA05", dtNow.AddMonths(6), DateAndTime.DateAdd(DateInterval.Quarter, 2, dtNow));
  103. AssertEquals("#DA06", dtNow.AddMonths(-6), DateAndTime.DateAdd("q", -2, dtNow));
  104. AssertEquals("#DA07", dtNow.AddMonths(3), DateAndTime.DateAdd(DateInterval.Month, 3, dtNow));
  105. AssertEquals("#DA08", dtNow.AddMonths(-3), DateAndTime.DateAdd("m", -3, dtNow));
  106. AssertEquals("#DA09", dtNow.AddDays(28), DateAndTime.DateAdd(DateInterval.WeekOfYear, 4, dtNow));
  107. AssertEquals("#DA10", dtNow.AddDays(-28), DateAndTime.DateAdd("ww", -4, dtNow));
  108. AssertEquals("#DA11", dtNow.AddDays(5), DateAndTime.DateAdd(DateInterval.Weekday, 5, dtNow));
  109. AssertEquals("#DA12", dtNow.AddDays(-5), DateAndTime.DateAdd("w", -5, dtNow));
  110. AssertEquals("#DA13", dtNow.AddDays(6), DateAndTime.DateAdd(DateInterval.DayOfYear, 6, dtNow));
  111. AssertEquals("#DA14", dtNow.AddDays(-6), DateAndTime.DateAdd("y", -6, dtNow));
  112. AssertEquals("#DA15", dtNow.AddDays(7), DateAndTime.DateAdd(DateInterval.Day, 7, dtNow));
  113. AssertEquals("#DA16", dtNow.AddDays(-7), DateAndTime.DateAdd("d", -7, dtNow));
  114. AssertEquals("#DA17", dtNow.AddHours(8), DateAndTime.DateAdd(DateInterval.Hour, 8, dtNow));
  115. AssertEquals("#DA18", dtNow.AddHours(-8), DateAndTime.DateAdd(DateInterval.Hour, -8, dtNow));
  116. AssertEquals("#DA19", dtNow.AddMinutes(9), DateAndTime.DateAdd(DateInterval.Minute, 9, dtNow));
  117. AssertEquals("#DA20", dtNow.AddMinutes(-9), DateAndTime.DateAdd("n", -9, dtNow));
  118. AssertEquals("#DA21", dtNow.AddSeconds(10), DateAndTime.DateAdd(DateInterval.Second, 10, dtNow));
  119. AssertEquals("#DA22", dtNow.AddSeconds(-10), DateAndTime.DateAdd("s", -10, dtNow));
  120. caughtException = false;
  121. try {
  122. DateAndTime.DateAdd(DateInterval.Year, int.MinValue, dtNow);
  123. }
  124. catch (Exception e) {
  125. caughtException = true;
  126. AssertEquals("#DA23", e.GetType(), typeof(Exception));
  127. }
  128. // AssertEquals("#DA24", caughtException, true);
  129. }
  130. public void TestDateDiff () {
  131. DateTime dtNow = DateTime.Now;
  132. DateTime dtOld = dtNow.AddYears(-1);
  133. // TODO: Test this better
  134. long diff = DateAndTime.DateDiff(DateInterval.Year, dtOld, dtNow, FirstDayOfWeek.System, FirstWeekOfYear.System);
  135. AssertEquals("#DD01", dtNow, dtOld.AddYears((int)diff));
  136. DateTime dtJan1 = new DateTime(2002, 1, 1);
  137. DateTime dtDec31 = new DateTime(2001, 12, 31);
  138. diff = DateAndTime.DateDiff(DateInterval.Year, dtDec31, dtJan1, FirstDayOfWeek.System, FirstWeekOfYear.System);
  139. AssertEquals("#DD02", 1L, diff);
  140. diff = DateAndTime.DateDiff(DateInterval.Quarter, dtDec31, dtJan1, FirstDayOfWeek.System, FirstWeekOfYear.System);
  141. AssertEquals("#DD03", 1L, diff);
  142. diff = DateAndTime.DateDiff(DateInterval.Month, dtDec31, dtJan1, FirstDayOfWeek.System, FirstWeekOfYear.System);
  143. AssertEquals("#DD04", 1L, diff);
  144. DateTime dtJan4 = new DateTime(2001, 1, 4); // This is a Thursday
  145. DateTime dtJan9 = new DateTime(2001, 1, 9); // This is the next Tuesday
  146. long WD = DateAndTime.DateDiff(DateInterval.Weekday, dtJan4, dtJan9, FirstDayOfWeek.System, FirstWeekOfYear.System);
  147. AssertEquals ("#DD05", 0L, WD);
  148. long WY = DateAndTime.DateDiff(DateInterval.WeekOfYear, dtJan4, dtJan9, FirstDayOfWeek.System, FirstWeekOfYear.System);
  149. AssertEquals ("#DD06", 1L, WY);
  150. }
  151. public void TestDatePart () {
  152. DateTime dtJan4 = new DateTime(2001, 1, 4);
  153. // TODO: Test this better
  154. AssertEquals("#DP01", 2001, DateAndTime.DatePart(DateInterval.Year, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.System));
  155. AssertEquals("#DP02", 1, DateAndTime.DatePart(DateInterval.Quarter, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.System));
  156. AssertEquals("#DP03", 1, DateAndTime.DatePart(DateInterval.Month, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.System));
  157. AssertEquals("#DP04", 1, DateAndTime.DatePart(DateInterval.WeekOfYear, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.FirstFourDays));
  158. AssertEquals("#DP05", 53, DateAndTime.DatePart(DateInterval.WeekOfYear, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.FirstFullWeek));
  159. AssertEquals("#DP06", 1, DateAndTime.DatePart(DateInterval.WeekOfYear, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.Jan1));
  160. AssertEquals("#DP07", 1, DateAndTime.DatePart(DateInterval.WeekOfYear, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.System));
  161. AssertEquals("#DP08", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Friday, FirstWeekOfYear.FirstFourDays));
  162. AssertEquals("#DP09", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Saturday, FirstWeekOfYear.FirstFourDays));
  163. AssertEquals("#DP10", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays));
  164. AssertEquals("#DP11", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays));
  165. AssertEquals("#DP12", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Tuesday, FirstWeekOfYear.FirstFourDays));
  166. AssertEquals("#DP13", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Wednesday, FirstWeekOfYear.FirstFourDays));
  167. AssertEquals("#DP14", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.Thursday, FirstWeekOfYear.FirstFourDays));
  168. AssertEquals("#DP15", 5, DateAndTime.DatePart(DateInterval.Weekday, dtJan4, FirstDayOfWeek.System, FirstWeekOfYear.FirstFourDays));
  169. }
  170. public void TestDateSerial () {
  171. DateTime dtJan4 = new DateTime(2001, 1, 4);
  172. DateTime dtSerial = DateAndTime.DateSerial(2001, 1, 4);
  173. AssertEquals("#DS01", dtJan4, dtSerial);
  174. }
  175. public void TestTimeSerial () {
  176. bool caughtException = false;
  177. try {
  178. DateAndTime.TimeSerial(0, -1440, -1);
  179. }
  180. catch (Exception e) {
  181. AssertEquals("#TS01", e.GetType(), typeof(ArgumentOutOfRangeException));
  182. caughtException = true;
  183. }
  184. AssertEquals("#TS02", true, caughtException);
  185. AssertEquals("#TS03", new DateTime(1, 1, 1, 1, 1, 1), DateAndTime.TimeSerial(1, 1, 1));
  186. }
  187. public void TestDateValue () {
  188. try {
  189. DateAndTime.DateValue("This is not a date.");
  190. }
  191. catch (FormatException) {
  192. /* do nothing. this is what we expect */
  193. }
  194. catch (Exception e) {
  195. Fail ("Unexpected exception:" + e);
  196. }
  197. AssertEquals("#DV03", new DateTime(1969, 2, 12), DateAndTime.DateValue("February 12, 1969"));
  198. }
  199. public void TestTimeValue () {
  200. try {
  201. DateAndTime.TimeValue("This is not a time.");
  202. }
  203. catch (FormatException) {
  204. /* do nothing. this is what we expect */
  205. }
  206. catch (Exception e) {
  207. Fail ("Unexpected exception:" + e);
  208. }
  209. AssertEquals("#TV03", new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 16, 35, 17), DateAndTime.TimeValue("4:35:17 PM"));
  210. }
  211. public void TestYear () {
  212. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  213. AssertEquals("#Y01", jan1.Year, DateAndTime.Year(jan1));
  214. }
  215. public void TestMonth () {
  216. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  217. AssertEquals("#MO01", jan1.Month, DateAndTime.Month(jan1));
  218. }
  219. public void TestDay () {
  220. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  221. AssertEquals("#D01", jan1.Day, DateAndTime.Day(jan1));
  222. }
  223. public void TestHour () {
  224. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  225. AssertEquals("#H01", jan1.Hour, DateAndTime.Hour(jan1));
  226. }
  227. public void TestMinute () {
  228. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  229. AssertEquals("#MI01", jan1.Minute, DateAndTime.Minute(jan1));
  230. }
  231. public void TestSecond () {
  232. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  233. AssertEquals("#S01", jan1.Second, DateAndTime.Second(jan1));
  234. }
  235. public void TestWeekday () {
  236. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  237. AssertEquals("#W01", (int)jan1.DayOfWeek + 1, DateAndTime.Weekday(jan1, FirstDayOfWeek.System));
  238. }
  239. public void TestMonthName () {
  240. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  241. AssertEquals("#MN01", CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(jan1.Month),
  242. DateAndTime.MonthName(jan1.Month, true));
  243. AssertEquals("#MN02", CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(jan1.Month),
  244. DateAndTime.MonthName(jan1.Month, false));
  245. bool caughtException = false;
  246. try {
  247. DateAndTime.MonthName(0, false);
  248. }
  249. catch (Exception e) {
  250. AssertEquals("#MN03", typeof(ArgumentException), e.GetType());
  251. caughtException = true;
  252. }
  253. AssertEquals("#MN04", true, caughtException);
  254. caughtException = false;
  255. try {
  256. DateAndTime.MonthName(14, false);
  257. }
  258. catch (Exception e) {
  259. AssertEquals("#MN05", typeof(ArgumentException), e.GetType());
  260. caughtException = true;
  261. }
  262. AssertEquals("#MN06", true, caughtException);
  263. //AssertEquals("#MN07", "", DateAndTime.MonthName(13, false));
  264. }
  265. public void TestWeekdayName () {
  266. DateTime jan1 = new DateTime(2001, 1, 1, 1, 1, 1);
  267. AssertEquals("#WN01", "Tue",
  268. DateAndTime.WeekdayName((int)jan1.DayOfWeek + 1, true, FirstDayOfWeek.System));
  269. AssertEquals("#WN02", "Tuesday",
  270. DateAndTime.WeekdayName((int)jan1.DayOfWeek + 1, false, FirstDayOfWeek.System));
  271. bool caughtException = false;
  272. try {
  273. DateAndTime.WeekdayName(0, false, FirstDayOfWeek.System);
  274. }
  275. catch (Exception e) {
  276. AssertEquals("#WN03", typeof(ArgumentException), e.GetType());
  277. caughtException = true;
  278. }
  279. AssertEquals("#WN04", true, caughtException);
  280. caughtException = false;
  281. try {
  282. DateAndTime.WeekdayName(8, false, FirstDayOfWeek.System);
  283. }
  284. catch (Exception e) {
  285. AssertEquals("#WN05", typeof(ArgumentException), e.GetType());
  286. caughtException = true;
  287. }
  288. AssertEquals("#WN06", true, caughtException);
  289. AssertEquals("#WN07", "Tuesday", DateAndTime.WeekdayName((int)jan1.DayOfWeek + 1, false, FirstDayOfWeek.System));
  290. }
  291. }
  292. }