DatePickerTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Globalization;
  2. namespace Terminal.Gui.ViewsTests;
  3. public class DatePickerTests
  4. {
  5. [Fact]
  6. public void DatePicker_ChangingCultureChangesFormat ()
  7. {
  8. var date = new DateTime (2000, 7, 23);
  9. var datePicker = new DatePicker (date);
  10. datePicker.Culture = CultureInfo.GetCultureInfo ("en-GB");
  11. Assert.Equal ("23/07/2000", datePicker.Text);
  12. datePicker.Culture = CultureInfo.GetCultureInfo ("pl-PL");
  13. Assert.Equal ("23.07.2000", datePicker.Text);
  14. // Deafult date format for en-US is M/d/yyyy but we are using StandardizeDateFormat method
  15. // to convert it to the format that has 2 digits for month and day.
  16. datePicker.Culture = CultureInfo.GetCultureInfo ("en-US");
  17. Assert.Equal ("07/23/2000", datePicker.Text);
  18. }
  19. [Fact]
  20. public void DatePicker_Default_Constructor_ShouldSetCurrenDate ()
  21. {
  22. var datePicker = new DatePicker ();
  23. Assert.Equal (DateTime.Now.Date.Day, datePicker.Date.Day);
  24. Assert.Equal (DateTime.Now.Date.Month, datePicker.Date.Month);
  25. Assert.Equal (DateTime.Now.Date.Year, datePicker.Date.Year);
  26. }
  27. [Fact]
  28. public void DatePicker_Constrctor_Now_ShouldSetCurrenDate ()
  29. {
  30. var datePicker = new DatePicker (DateTime.Now);
  31. Assert.Equal (DateTime.Now.Date.Day, datePicker.Date.Day);
  32. Assert.Equal (DateTime.Now.Date.Month, datePicker.Date.Month);
  33. Assert.Equal (DateTime.Now.Date.Year, datePicker.Date.Year);
  34. }
  35. [Fact]
  36. public void DatePicker_X_Y_Init ()
  37. {
  38. var datePicker = new DatePicker { Y = Pos.Center (), X = Pos.Center () };
  39. Assert.Equal (DateTime.Now.Date.Day, datePicker.Date.Day);
  40. Assert.Equal (DateTime.Now.Date.Month, datePicker.Date.Month);
  41. Assert.Equal (DateTime.Now.Date.Year, datePicker.Date.Year);
  42. }
  43. [Fact]
  44. public void DatePicker_SetDate_ShouldChangeText ()
  45. {
  46. var datePicker = new DatePicker { Culture = CultureInfo.GetCultureInfo ("en-GB") };
  47. var newDate = new DateTime (2024, 1, 15);
  48. string format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
  49. datePicker.Date = newDate;
  50. Assert.Equal (newDate.ToString (format), datePicker.Text);
  51. }
  52. [Fact]
  53. [AutoInitShutdown]
  54. public void DatePicker_ShouldNot_SetDateOutOfRange_UsingNextMonthButton ()
  55. {
  56. var date = new DateTime (9999, 11, 15);
  57. var datePicker = new DatePicker (date);
  58. var top = new Toplevel ();
  59. top.Add (datePicker);
  60. Application.Begin (top);
  61. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_dateField"), datePicker.Focused);
  62. // Set focus to next month button
  63. datePicker.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
  64. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_calendar"), datePicker.Focused);
  65. datePicker.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
  66. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_previousMonthButton"), datePicker.Focused);
  67. datePicker.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
  68. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_nextMonthButton"), datePicker.Focused);
  69. // Change month to December
  70. Assert.False (Application.RaiseKeyDownEvent (Key.Enter));
  71. Assert.Equal (12, datePicker.Date.Month);
  72. // Next month button is disabled, so focus advanced to edit field
  73. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_previousMonthButton"), datePicker.Focused);
  74. top.Dispose ();
  75. }
  76. [Fact]
  77. [AutoInitShutdown]
  78. public void DatePicker_ShouldNot_SetDateOutOfRange_UsingPreviousMonthButton ()
  79. {
  80. var date = new DateTime (1, 2, 15);
  81. var datePicker = new DatePicker (date);
  82. var top = new Toplevel ();
  83. // Move focus to previous month button
  84. top.Add (datePicker);
  85. Application.Begin (top);
  86. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_dateField"), datePicker.Focused);
  87. datePicker.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
  88. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_calendar"), datePicker.Focused);
  89. datePicker.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop);
  90. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_previousMonthButton"), datePicker.Focused);
  91. // Change month to January
  92. Assert.False (datePicker.NewKeyDownEvent (Key.Enter));
  93. Assert.Equal (1, datePicker.Date.Month);
  94. // Next prev button is disabled, so focus advanced to edit button
  95. Assert.Equal (datePicker.Subviews.First (v => v.Id == "_calendar"), datePicker.Focused);
  96. top.Dispose ();
  97. }
  98. }