From 051482de57d8410e04db84006cafbcbeff60592b Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Mon, 17 Feb 2025 01:39:39 +0800 Subject: [PATCH 1/9] test:WIP add tests. Change decade context end date. --- src/Ursa/AssemblyInfo.cs | 3 + .../DateTimePicker/CalendarContext.cs | 2 +- .../Controls/DateTimePicker/CalendarView.cs | 8 +- .../Controls/DateTimePicker/DateTimeHelper.cs | 2 +- .../DateTimePicker/CalendarViewHelper.cs | 54 ++++ .../DateTimePicker/CalendarViewTests.cs | 245 ++++++++++++++++++ .../DrawerCloseTestPopupControlVM.cs | 10 +- .../HeadlessTest.Ursa.csproj | 1 + .../CalendarContextTests.cs | 122 +++++++++ .../CalendarDayButtonTests.cs | 91 +++++++ .../DateTimeHelperTests.cs | 74 ++++++ 11 files changed, 604 insertions(+), 8 deletions(-) create mode 100644 tests/HeadlessTest.Ursa/Controls/DateTimePicker/CalendarViewHelper.cs create mode 100644 tests/HeadlessTest.Ursa/Controls/DateTimePicker/CalendarViewTests.cs create mode 100644 tests/Test.Ursa/DateTimePickerTests/CalendarContextTests.cs create mode 100644 tests/Test.Ursa/DateTimePickerTests/CalendarDayButtonTests.cs create mode 100644 tests/Test.Ursa/DateTimePickerTests/DateTimeHelperTests.cs diff --git a/src/Ursa/AssemblyInfo.cs b/src/Ursa/AssemblyInfo.cs index a45e3de..0fd82bc 100644 --- a/src/Ursa/AssemblyInfo.cs +++ b/src/Ursa/AssemblyInfo.cs @@ -1,5 +1,8 @@ +using System.Runtime.CompilerServices; using Avalonia.Metadata; +[assembly:InternalsVisibleTo("HeadlessTest.Ursa")] +[assembly:InternalsVisibleTo("Test.Ursa")] [assembly:XmlnsPrefix("https://irihi.tech/ursa", "u")] [assembly:XmlnsDefinition("https://irihi.tech/ursa", "Ursa")] [assembly:XmlnsDefinition("https://irihi.tech/ursa", "Ursa.Controls")] diff --git a/src/Ursa/Controls/DateTimePicker/CalendarContext.cs b/src/Ursa/Controls/DateTimePicker/CalendarContext.cs index f2eb957..73eab1c 100644 --- a/src/Ursa/Controls/DateTimePicker/CalendarContext.cs +++ b/src/Ursa/Controls/DateTimePicker/CalendarContext.cs @@ -1,6 +1,6 @@ namespace Ursa.Controls; -public sealed class CalendarContext(int? year = null, int? month = null, int? startYear = null, int? endYear = null): IComparable +internal sealed class CalendarContext(int? year = null, int? month = null, int? startYear = null, int? endYear = null): IComparable { public int? Year { get; } = year; public int? Month { get; } = month; diff --git a/src/Ursa/Controls/DateTimePicker/CalendarView.cs b/src/Ursa/Controls/DateTimePicker/CalendarView.cs index 8d37511..6d22319 100644 --- a/src/Ursa/Controls/DateTimePicker/CalendarView.cs +++ b/src/Ursa/Controls/DateTimePicker/CalendarView.cs @@ -95,13 +95,13 @@ public class CalendarView : TemplatedControl private CalendarContext _contextDate = new(); - public static readonly DirectProperty ContextDateProperty = AvaloniaProperty.RegisterDirect( + internal static readonly DirectProperty ContextDateProperty = AvaloniaProperty.RegisterDirect( nameof(ContextDate), o => o.ContextDate, (o, v) => o.ContextDate = v); - public CalendarContext ContextDate + internal CalendarContext ContextDate { get => _contextDate; - internal set => SetAndRaise(ContextDateProperty, ref _contextDate, value); + set => SetAndRaise(ContextDateProperty, ref _contextDate, value); } public bool IsTodayHighlighted @@ -535,7 +535,7 @@ public class CalendarView : TemplatedControl IsEnabledProperty.SetValue(canNext, _nextButton, _fastNextButton); } - public void MarkDates(DateTime? startDate = null, DateTime? endDate = null, DateTime? previewStartDate = null, DateTime? previewEndDate = null) + internal void MarkDates(DateTime? startDate = null, DateTime? endDate = null, DateTime? previewStartDate = null, DateTime? previewEndDate = null) { _start = startDate; _end = endDate; diff --git a/src/Ursa/Controls/DateTimePicker/DateTimeHelper.cs b/src/Ursa/Controls/DateTimePicker/DateTimeHelper.cs index 06d9ee2..8e6cd75 100644 --- a/src/Ursa/Controls/DateTimePicker/DateTimeHelper.cs +++ b/src/Ursa/Controls/DateTimePicker/DateTimeHelper.cs @@ -46,7 +46,7 @@ internal static class DateTimeHelper public static (int start, int end) GetDecadeViewRangeByYear(int year) { int start = year / 10 * 10; - return new ValueTuple(start, start + 10); + return new ValueTuple(start, start + 10 - 1); } public static (int start, int end) GetCenturyViewRangeByYear(int year) diff --git a/tests/HeadlessTest.Ursa/Controls/DateTimePicker/CalendarViewHelper.cs b/tests/HeadlessTest.Ursa/Controls/DateTimePicker/CalendarViewHelper.cs new file mode 100644 index 0000000..b351389 --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/DateTimePicker/CalendarViewHelper.cs @@ -0,0 +1,54 @@ +using Avalonia.Controls; +using Avalonia.Controls.Templates; +using Avalonia.Interactivity; +using Ursa.Controls; + +namespace HeadlessTest.Ursa.Controls.DateTimePicker; + +internal static class CalendarViewHelper +{ + internal static void ClickPrevious(this CalendarView calendarView) + { + var previousButton = calendarView.GetTemplateChildren() + .FirstOrDefault(a => a.Name == CalendarView.PART_PreviousButton); + Assert.IsType