test:WIP add tests. Change decade context end date.
This commit is contained in:
@@ -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")]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace Ursa.Controls;
|
||||
|
||||
public sealed class CalendarContext(int? year = null, int? month = null, int? startYear = null, int? endYear = null): IComparable<CalendarContext>
|
||||
internal sealed class CalendarContext(int? year = null, int? month = null, int? startYear = null, int? endYear = null): IComparable<CalendarContext>
|
||||
{
|
||||
public int? Year { get; } = year;
|
||||
public int? Month { get; } = month;
|
||||
|
||||
@@ -95,13 +95,13 @@ public class CalendarView : TemplatedControl
|
||||
|
||||
private CalendarContext _contextDate = new();
|
||||
|
||||
public static readonly DirectProperty<CalendarView, CalendarContext> ContextDateProperty = AvaloniaProperty.RegisterDirect<CalendarView, CalendarContext>(
|
||||
internal static readonly DirectProperty<CalendarView, CalendarContext> ContextDateProperty = AvaloniaProperty.RegisterDirect<CalendarView, CalendarContext>(
|
||||
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;
|
||||
|
||||
@@ -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<int, int>(start, start + 10);
|
||||
return new ValueTuple<int, int>(start, start + 10 - 1);
|
||||
}
|
||||
|
||||
public static (int start, int end) GetCenturyViewRangeByYear(int year)
|
||||
|
||||
@@ -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<Button>(previousButton);
|
||||
var button = (Button)previousButton;
|
||||
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
|
||||
}
|
||||
|
||||
internal static void ClickNext(this CalendarView calendarView)
|
||||
{
|
||||
var nextButton = calendarView.GetTemplateChildren()
|
||||
.FirstOrDefault(a => a.Name == CalendarView.PART_NextButton);
|
||||
Assert.IsType<Button>(nextButton);
|
||||
var button = (Button)nextButton;
|
||||
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
|
||||
}
|
||||
|
||||
internal static void ClickFastNext(this CalendarView calendarView)
|
||||
{
|
||||
var nextButton = calendarView.GetTemplateChildren()
|
||||
.FirstOrDefault(a => a.Name == CalendarView.PART_FastNextButton);
|
||||
Assert.IsType<Button>(nextButton);
|
||||
var button = (Button)nextButton;
|
||||
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
|
||||
}
|
||||
|
||||
internal static void ClickFastPrevious(this CalendarView calendarView)
|
||||
{
|
||||
var previousButton = calendarView.GetTemplateChildren()
|
||||
.FirstOrDefault(a => a.Name == CalendarView.PART_FastPreviousButton);
|
||||
Assert.IsType<Button>(previousButton);
|
||||
var button = (Button)previousButton;
|
||||
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
|
||||
}
|
||||
|
||||
internal static void ClickHeaderButton(this CalendarView calendarView)
|
||||
{
|
||||
var headerButton = calendarView.GetTemplateChildren()
|
||||
.FirstOrDefault(a => a.Name == CalendarView.PART_HeaderButton);
|
||||
Assert.IsType<Button>(headerButton);
|
||||
var button = (Button)headerButton;
|
||||
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,245 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Headless;
|
||||
using Avalonia.Headless.XUnit;
|
||||
using Avalonia.Input;
|
||||
using Avalonia.Threading;
|
||||
using Avalonia.VisualTree;
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace HeadlessTest.Ursa.Controls.DateTimePicker;
|
||||
|
||||
public class CalendarViewTests
|
||||
{
|
||||
[AvaloniaFact]
|
||||
public void OnNext_MonthMode_UpdatesToNextMonth()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView
|
||||
{ Mode = CalendarViewMode.Month };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickNext();
|
||||
Assert.Equal(6, calendarView.ContextDate.Month);
|
||||
Assert.Equal(2023, calendarView.ContextDate.Year);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnNext_MonthMode_FastForward_UpdatesToNextYear()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView
|
||||
{ Mode = CalendarViewMode.Month };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickFastNext();
|
||||
Assert.Equal(5, calendarView.ContextDate.Month);
|
||||
Assert.Equal(2024, calendarView.ContextDate.Year);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnNext_YearMode_UpdatesToNextYear()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView
|
||||
{ Mode = CalendarViewMode.Year };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickNext();
|
||||
Assert.Equal(5, calendarView.ContextDate.Month);
|
||||
Assert.Equal(2024, calendarView.ContextDate.Year);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnNext_DecadeMode_UpdatesToNextDecade()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickNext();
|
||||
Assert.Equal(2010, calendarView.ContextDate.StartYear);
|
||||
Assert.Equal(2019, calendarView.ContextDate.EndYear);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnNext_CenturyMode_UpdatesToNextCentury()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Century };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 1900, 1999);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickNext();
|
||||
Assert.Equal(2000, calendarView.ContextDate.StartYear);
|
||||
Assert.Equal(2099, calendarView.ContextDate.EndYear);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnPrevious_MonthMode_UpdatesToPreviousMonth()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Month };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickPrevious();
|
||||
Assert.Equal(4, calendarView.ContextDate.Month);
|
||||
Assert.Equal(2023, calendarView.ContextDate.Year);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnPrevious_YearMode_UpdatesToPreviousYear()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Year };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickPrevious();
|
||||
Assert.Equal(2022, calendarView.ContextDate.Year);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnPrevious_DecadeMode_UpdatesToPreviousDecade()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickPrevious();
|
||||
Assert.Equal(1990, calendarView.ContextDate.StartYear);
|
||||
Assert.Equal(1999, calendarView.ContextDate.EndYear);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnPrevious_CenturyMode_UpdatesToPreviousCentury()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Century };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 1900, 1999);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickPrevious();
|
||||
Assert.Equal(1800, calendarView.ContextDate.StartYear);
|
||||
Assert.Equal(1899, calendarView.ContextDate.EndYear);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnFastPrevious_MonthMode_UpdatesToPreviousYear()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Month };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickFastPrevious();
|
||||
Assert.Equal(2022, calendarView.ContextDate.Year);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnHeaderButtonClick_YearMode_SwitchesToDecadeMode()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Year };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickHeaderButton();
|
||||
Assert.Equal(CalendarViewMode.Decade, calendarView.Mode);
|
||||
Assert.Equal(2020, calendarView.ContextDate.StartYear);
|
||||
Assert.Equal(2029, calendarView.ContextDate.EndYear);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnHeaderButtonClick_DecadeMode_SwitchesToCenturyMode()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ClickHeaderButton();
|
||||
Assert.Equal(CalendarViewMode.Century, calendarView.Mode);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnYearItemSelected_CenturyMode_SwitchesToDecadeMode()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Century };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 1900, 1999);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
var yearButton = calendarView.FindDescendantOfType<CalendarYearButton>();
|
||||
var position = yearButton?.TranslatePoint(new Point(6, 6), window);
|
||||
Assert.NotNull(position);
|
||||
window.MouseUp(position.Value, MouseButton.Left);
|
||||
Assert.Equal(CalendarViewMode.Decade, calendarView.Mode);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnYearItemSelected_DecadeMode_SwitchesToYearMode()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
var yearButton = calendarView.FindDescendantOfType<CalendarYearButton>();
|
||||
var position = yearButton?.TranslatePoint(new Point(6, 6), window);
|
||||
Assert.NotNull(position);
|
||||
window.MouseUp(position.Value, MouseButton.Left);
|
||||
Assert.Equal(CalendarViewMode.Year, calendarView.Mode);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void OnYearItemSelected_YearMode_SwitchesToMonthMode()
|
||||
{
|
||||
var window = new Window();
|
||||
var calendarView = new CalendarView { Mode = CalendarViewMode.Year };
|
||||
window.Content = calendarView;
|
||||
window.Show();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
calendarView.ContextDate = new CalendarContext(2023, 5);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
var yearButton = calendarView.FindDescendantOfType<CalendarYearButton>();
|
||||
var position = yearButton?.TranslatePoint(new Point(6, 6), window);
|
||||
Assert.NotNull(position);
|
||||
window.MouseUp(position.Value, MouseButton.Left);
|
||||
Assert.Equal(CalendarViewMode.Month, calendarView.Mode);
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,13 @@ public class DrawerCloseTestPopupControlVM : IDialogContext
|
||||
RequestClose?.Invoke(this, Result);
|
||||
}
|
||||
|
||||
#if NET8_0
|
||||
public int Result { get; } = Random.Shared.Next();
|
||||
#endif
|
||||
|
||||
#if NETSTANDARD2_0
|
||||
private static Random r = new Random();
|
||||
public int Result { get; } = r.Next();
|
||||
#endif
|
||||
public event EventHandler<object?>? RequestClose;
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
|
||||
122
tests/Test.Ursa/DateTimePickerTests/CalendarContextTests.cs
Normal file
122
tests/Test.Ursa/DateTimePickerTests/CalendarContextTests.cs
Normal file
@@ -0,0 +1,122 @@
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace Test.Ursa.DateTimePicker;
|
||||
|
||||
public class CalendarContextTests
|
||||
{
|
||||
[Fact]
|
||||
public void Clone_ReturnsExactCopy()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5, 2000, 2030);
|
||||
var clone = context.Clone();
|
||||
Assert.Equal(context.Year, clone.Year);
|
||||
Assert.Equal(context.Month, clone.Month);
|
||||
Assert.Equal(context.StartYear, clone.StartYear);
|
||||
Assert.Equal(context.EndYear, clone.EndYear);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Today_ReturnsCurrentDate()
|
||||
{
|
||||
var today = CalendarContext.Today();
|
||||
Assert.Equal(DateTime.Today.Year, today.Year);
|
||||
Assert.Equal(DateTime.Today.Month, today.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void With_UpdatesSpecifiedFields()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5, 2000, 2030);
|
||||
var updated = context.With(month: 6);
|
||||
Assert.Equal(2023, updated.Year);
|
||||
Assert.Equal(6, updated.Month);
|
||||
Assert.Equal(2000, updated.StartYear);
|
||||
Assert.Equal(2030, updated.EndYear);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NextMonth_UpdatesToNextMonth()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5);
|
||||
var nextMonth = context.NextMonth();
|
||||
Assert.Equal(2023, nextMonth.Year);
|
||||
Assert.Equal(6, nextMonth.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NextMonth_UpdatesToNextYear()
|
||||
{
|
||||
var context = new CalendarContext(2023, 12);
|
||||
var nextMonth = context.NextMonth();
|
||||
Assert.Equal(2024, nextMonth.Year);
|
||||
Assert.Equal(1, nextMonth.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PreviousMonth_UpdatesToPreviousMonth()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5);
|
||||
var previousMonth = context.PreviousMonth();
|
||||
Assert.Equal(2023, previousMonth.Year);
|
||||
Assert.Equal(4, previousMonth.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PreviousMonth_UpdatesToPreviousYear()
|
||||
{
|
||||
var context = new CalendarContext(2023, 1);
|
||||
var previousMonth = context.PreviousMonth();
|
||||
Assert.Equal(2022, previousMonth.Year);
|
||||
Assert.Equal(12, previousMonth.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NextYear_UpdatesToNextYear()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5);
|
||||
var nextYear = context.NextYear();
|
||||
Assert.Equal(2024, nextYear.Year);
|
||||
Assert.Equal(5, nextYear.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PreviousYear_UpdatesToPreviousYear()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5);
|
||||
var previousYear = context.PreviousYear();
|
||||
Assert.Equal(2022, previousYear.Year);
|
||||
Assert.Equal(5, previousYear.Month);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareTo_SameContext_ReturnsZero()
|
||||
{
|
||||
var context1 = new CalendarContext(2023, 5);
|
||||
var context2 = new CalendarContext(2023, 5);
|
||||
Assert.Equal(0, context1.CompareTo(context2));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareTo_DifferentYear_ReturnsNonZero()
|
||||
{
|
||||
var context1 = new CalendarContext(2023, 5);
|
||||
var context2 = new CalendarContext(2024, 5);
|
||||
Assert.NotEqual(0, context1.CompareTo(context2));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareTo_DifferentMonth_ReturnsNonZero()
|
||||
{
|
||||
var context1 = new CalendarContext(2023, 5);
|
||||
var context2 = new CalendarContext(2023, 6);
|
||||
Assert.NotEqual(0, context1.CompareTo(context2));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToString_ReturnsCorrectFormat()
|
||||
{
|
||||
var context = new CalendarContext(2023, 5, 2000, 2030);
|
||||
var expected = "Start: 2000, End: 2030, Year: 2023, Month: 5";
|
||||
Assert.Equal(expected, context.ToString());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
using Avalonia.Input;
|
||||
using Irihi.Avalonia.Shared.Common;
|
||||
using CalendarDayButton = Ursa.Controls.CalendarDayButton;
|
||||
|
||||
namespace Test.Ursa.DateTimePicker;
|
||||
|
||||
public class CalendarDayButtonTests
|
||||
{
|
||||
[Fact]
|
||||
public void IsToday_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsToday = true;
|
||||
Assert.Contains(CalendarDayButton.PC_Today, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsStartDate_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsStartDate = true;
|
||||
Assert.Contains(CalendarDayButton.PC_StartDate, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsEndDate_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsEndDate = true;
|
||||
Assert.Contains(CalendarDayButton.PC_EndDate, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsPreviewStartDate_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsPreviewStartDate = true;
|
||||
Assert.Contains(CalendarDayButton.PC_PreviewStartDate, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsPreviewEndDate_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsPreviewEndDate = true;
|
||||
Assert.Contains(CalendarDayButton.PC_PreviewEndDate, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsInRange_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsInRange = true;
|
||||
Assert.Contains(CalendarDayButton.PC_InRange, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsSelected_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsSelected = true;
|
||||
Assert.Contains(PseudoClassName.PC_Selected, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsBlackout_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsBlackout = true;
|
||||
Assert.Contains(CalendarDayButton.PC_Blackout, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsNotCurrentMonth_SetsPseudoClass()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsNotCurrentMonth = true;
|
||||
Assert.Contains(CalendarDayButton.PC_NotCurrentMonth, button.Classes);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ResetSelection_ClearsPseudoClasses()
|
||||
{
|
||||
var button = new CalendarDayButton();
|
||||
button.IsSelected = true;
|
||||
button.IsStartDate = true;
|
||||
button.ResetSelection();
|
||||
Assert.DoesNotContain(PseudoClassName.PC_Selected, button.Classes);
|
||||
Assert.DoesNotContain(CalendarDayButton.PC_StartDate, button.Classes);
|
||||
}
|
||||
}
|
||||
74
tests/Test.Ursa/DateTimePickerTests/DateTimeHelperTests.cs
Normal file
74
tests/Test.Ursa/DateTimePickerTests/DateTimeHelperTests.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace Test.Ursa.DateTimePicker;
|
||||
|
||||
public class DateTimeHelperTests
|
||||
{
|
||||
[Fact]
|
||||
public void GetFirstDayOfMonth_ReturnsFirstDay()
|
||||
{
|
||||
var date = new DateTime(2023, 5, 15);
|
||||
var firstDay = date.GetFirstDayOfMonth();
|
||||
Assert.Equal(new DateTime(2023, 5, 1), firstDay);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetLastDayOfMonth_ReturnsLastDay()
|
||||
{
|
||||
var date = new DateTime(2023, 5, 15);
|
||||
var lastDay = date.GetLastDayOfMonth();
|
||||
Assert.Equal(new DateTime(2023, 5, 31), lastDay);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareYearMonth_SameYearMonth_ReturnsZero()
|
||||
{
|
||||
var date1 = new DateTime(2023, 5, 15);
|
||||
var date2 = new DateTime(2023, 5, 20);
|
||||
var result = DateTimeHelper.CompareYearMonth(date1, date2);
|
||||
Assert.Equal(0, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CompareYearMonth_DifferentYearMonth_ReturnsDifference()
|
||||
{
|
||||
var date1 = new DateTime(2023, 5, 15);
|
||||
var date2 = new DateTime(2024, 6, 20);
|
||||
var result = DateTimeHelper.CompareYearMonth(date1, date2);
|
||||
Assert.Equal(-13, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Min_ReturnsMinimumDate()
|
||||
{
|
||||
var date1 = new DateTime(2023, 5, 15);
|
||||
var date2 = new DateTime(2024, 6, 20);
|
||||
var result = DateTimeHelper.Min(date1, date2);
|
||||
Assert.Equal(date1, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Max_ReturnsMaximumDate()
|
||||
{
|
||||
var date1 = new DateTime(2023, 5, 15);
|
||||
var date2 = new DateTime(2024, 6, 20);
|
||||
var result = DateTimeHelper.Max(date1, date2);
|
||||
Assert.Equal(date2, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetDecadeViewRangeByYear_ReturnsCorrectRange()
|
||||
{
|
||||
var year = 2023;
|
||||
var result = DateTimeHelper.GetDecadeViewRangeByYear(year);
|
||||
Assert.Equal((2020, 2029), result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetCenturyViewRangeByYear_ReturnsCorrectRange()
|
||||
{
|
||||
var year = 2023;
|
||||
var result = DateTimeHelper.GetCenturyViewRangeByYear(year);
|
||||
Assert.Equal((2000, 2100), result);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user